#include <iostream>
#include <unistd.h>
void test_tie() {
	int a = 0;
	std::ostream *old_tie = std::cin.tie(nullptr);//返回指向cout输出流对象的指针
	//x.tie()返回流x绑定的输出流的指针，如果没有则返回空指针；
	//x.tie(&o)是一个重载版本，返回流x绑定的输出流的指针，如果没有则返回空指针，并将x关联到o
	std::cin.tie(&std::cerr);//cin绑定到cerr
	std::cerr.tie(nullptr);//cerrr与cout解绑
	std::cerr << "cerr:blabla\n" ;
	//std::cin.tie(old_tie);//cin重新绑定到cout
	*old_tie << "blabla" ;//*old_tie就是cout对象
	std::cout << "blabla";//与上一行等价
	sleep(4);//过了这四秒，标准输出才出现字符串，说明是return时刷新了cout的缓冲区	
}
void test_state() {
	int a = 0;
	std::cin >> a;
	std::cout << std::cin.goodbit << std::endl;
	auto old_state = std::cin.rdstate();
	std::cin.clear();
	std::cin.setstate(old_state);
}
void test_manipulator() {
	std::cout << 123 << std::endl;
	std::cout << "123" << std::ends;
	std::cout << 123 << std::flush;
	std::cout << 123 << std::unitbuf;
	std::cout << 123 << std::nounitbuf;
}

int main() {
	//test_tie();
	//test_state();	
	test_manipulator();
	return 0;
}
